package com.example.springboot.service.impl;

import com.example.springboot.entity.Story;
import com.example.springboot.mapper.StoryMapper;
import com.example.springboot.service.StoryService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.Random;

/**
 * 故事服务实现类
 * 实现对故事数据的业务操作
 */
@Service
public class StoryServiceImpl implements StoryService {

    /**
     * 注入故事数据访问接口
     */
    @Autowired
    private StoryMapper storyMapper;

    /**
     * 根据故事ID获取故事详情
     *
     * @param storyId 故事ID
     * @return 故事对象，如果不存在则返回null
     */
    @Override
    public Story getStoryById(String storyId) {
        return storyMapper.findById(storyId);
    }

    /**
     * 根据用户ID获取该用户的所有故事
     *
     * @param userId 用户ID
     * @return 故事列表
     */
    @Override
    public List<Story> getStoriesByUserId(Integer userId) {
        return storyMapper.findByUserId(userId);
    }

    /**
     * 保存故事（新增或更新）
     * 如果故事ID为空或不存在，则新增；否则更新
     *
     * @param story 故事对象
     * @return 保存后的故事对象
     */
    @Override
    public Story saveStory(Story story) {
        // 检查是否为新增故事
        if (story.getStoryId() == null || story.getStoryId().isEmpty()) {
            // 生成新的故事ID
            story.setStoryId(generateStoryId());
            // 插入新故事
            storyMapper.insert(story);
        } else {
            // 检查故事是否存在
            Story existingStory = getStoryById(story.getStoryId());
            if (existingStory == null) {
                // 如果不存在，则插入新故事
                storyMapper.insert(story);
            } else {
                // 如果存在，则更新故事
                storyMapper.update(story);
            }
        }
        return story;
    }

    /**
     * 根据故事ID删除故事
     *
     * @param storyId 故事ID
     * @return 是否删除成功
     */
    @Override
    public boolean deleteStory(String storyId) {
        return storyMapper.deleteById(storyId) > 0;
    }

    /**
     * 获取所有可分享的故事
     *
     * @return 可分享的故事列表
     */
    @Override
    public List<Story> getSharableStories() {
        return storyMapper.findAllSharable();
    }

    /**
     * 根据故事分类获取故事
     *
     * @param classification 故事分类
     * @return 故事列表
     */
    @Override
    public List<Story> getStoriesByClassification(Integer classification) {
        return storyMapper.findByClassification(classification);
    }

    /**
     * 根据标签搜索故事
     *
     * @param tag 标签关键词
     * @return 匹配的故事列表
     */
    @Override
    public List<Story> searchStoriesByTag(String tag) {
        return storyMapper.findByTag(tag);
    }

    /**
     * 生成新的故事ID
     * 格式为：7 + 3位随机数
     *
     * @return 新的故事ID
     */
    @Override
    public String generateStoryId() {
        Random random = new Random();
        int randomNum = random.nextInt(900) + 100; // 生成100-999之间的随机数
        return "7" + randomNum;
    }
}